<?php
declare (strict_types=1);

namespace app\common\lib;

use think\response\Json;

/**
 * Trait 应用服务类
 *
 * @package app
 */
trait ResponseJson
{
    /**
     * App接口请求成功时返回
     *
     * @param string $msg
     * @param array  $data
     * @param int    $http_code
     *
     * @return Json
     */
    public function jsonSuccessData(string $msg = 'success', array $data = [], int $http_code = 200): Json
    {
        $json_data = [
            'code' => 200,
            'msg'  => $msg,
            'data' => $data
        ];

        return json($json_data, $http_code);
    }

    /**
     * 同步数据
     *
     * @param string $msg
     * @param array  $data
     * @param int    $http_code
     *
     * @return Json
     */
    public function jsonSyncSuccessData(string $msg = 'success', array $data = [], int $http_code = 200): Json
    {
        $json_data = [
            'code' => 201,
            'msg'  => $msg,
            'data' => $data
        ];

        return json($json_data, $http_code);
    }

    /**
     * App接口请求失败时返回
     *
     * @param string $msg
     * @param array  $data
     * @param int    $code
     * @param int    $http_code
     * @param array  $fatal
     *
     * @return Json
     */
    public function jsonFailData(string $msg = "fail", array $data = [], int $code = 400, int $http_code = 200, array $fatal = []): Json
    {
        $json_data = [
            'code' => $code,
            'msg'  => $msg,
            'data' => $data
        ];

        if (!empty($fatal)) {
            $json_data = array_merge($json_data, $fatal);
        }

        return json($json_data, $http_code);
    }
}